/*
	This file is part of AVRCppLib.

    AVRCppLib is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    AVRCppLib is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with AVRCppLib.  If not, see <http://www.gnu.org/licenses/>.

    Copyright (C) Maxime Lemonnier 2007-2011
 */

#include "ReceiveEOLActiveStringBuffer.h"

ReceiveEOLActiveStringBuffer::ReceiveEOLActiveStringBuffer(size_t size, char eol, bool terminal) :
StringBuffer(size), eol(eol), eolFound(false), terminal(terminal)
{
	// TODO Auto-generated constructor stub

}

ReceiveEOLActiveStringBuffer::~ReceiveEOLActiveStringBuffer()
{
	// TODO Auto-generated destructor stub
}

void ReceiveEOLActiveStringBuffer::receiveByte(char byte)
{
	LOCK_INTERRUPTS;

	if(byte == eol)
		eolFound = true;

	if(terminal)
	{
		if(byte == '\b' || byte == 127)
		{
			this->pop();
			byte = '\b';
		}
		else
		{
			this->enQueue(byte);
		}
		printf("%c", byte);
	}
	else
		this->enQueue(byte);




	UNLOCK_INTERRUPTS;
}

bool ReceiveEOLActiveStringBuffer::isOpen()
{
	bool isOpenCopy;

	LOCK_INTERRUPTS;

	isOpenCopy = (!this->isFull() && !eolFound);

	UNLOCK_INTERRUPTS;

	return isOpenCopy;
}

void ReceiveEOLActiveStringBuffer::reset()
{
	LOCK_INTERRUPTS;

	eolFound = false;

	this->init();

	UNLOCK_INTERRUPTS;
}
